package com.app.manage.utils;

import cn.hutool.extra.ssh.Sftp;
import com.jcraft.jsch.SftpProgressMonitor;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class SftpTest {


    public static void main(String[] args) throws Exception {
        sftpTest();
    }


    public static void sftpTest() throws Exception{
        // 配置 SSH 连接信息
        String host = "192.168.17.129";
        int port = 22;
        String username = "root";
        String password = "root";
        String remoteDir = "/home";
        String localDir = "C:\\Users\\86173\\Desktop";

        // 创建一个 Sftp 连接
        Sftp sftp = new Sftp(host, port, username, password);

        try {
            // 获取文件列表
            List<String> files = listFilesRecursively(sftp,remoteDir);
            System.err.println("123123");
//            files = files.stream().filter(o-> !o.startsWith(".")).collect(Collectors.toList());
//            // 遍历文件并下载
//            for (String fileName : files) {
//                String remoteFilePath = remoteDir + "/" + fileName;
//                String localFilePath = localDir + "/" + fileName;
//
//                // 创建文件输入流
//                File f = new File(localFilePath);
//                FileInputStream fis = new FileInputStream(f);
//
//                // 创建进度监听器
//                SftpProgressMonitor progressMonitor = new SftpProgressMonitor() {
//                    private long totalSize = 0;
//                    private long transferred = 0;
//
//                    @Override
//                    public void init(int op, String src, String dest, long max) {
//                        this.totalSize = max;
//                        System.out.println("开始传输文件：" + src);
//                    }
//
//                    @Override
//                    public boolean count(long count) {
//                        transferred += count;
//                        // 打印传输进度
//                        System.out.println("已传输: " + transferred + "/" + totalSize + " 字节 (" + (transferred * 100 / totalSize) + "%)");
//                        return true;
//                    }
//
//                    @Override
//                    public void end() {
//                        System.out.println("传输完成！");
//                    }
//                };
//
//                // 使用 SFTP 上传文件并传入进度监听器
//                sftp.put(fis,remoteFilePath,progressMonitor, Sftp.Mode.OVERWRITE);
//            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sftp.close();
        }
    }


    private static List<String> listFilesRecursively(Sftp sftp, String path) {
        List<String> filePaths = new ArrayList<>();
        try {
            List<String> files = sftp.ls(path);
            for (String file : files) {
                String fullPath = path + "/" + file;
                // 如果是文件，添加文件路径到集合
                if (!sftp.isDir(fullPath)) {
                    filePaths.add(fullPath);
                } else {
                    // 如果是目录，递归列出
                    filePaths.addAll(listFilesRecursively(sftp, fullPath));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return filePaths;
    }

}
